/**
* @addtogroup bts_state_bt
* bts_state_bt
* @{
*/
/**
* @file         bts_state_bt.h
* @brief        
* @note
* @author       Akee(shengkun.you@hopechart.com,尤胜坤)
*
* @par          修改日志
* <table>
* <tr><th>Date        <th>Version               <th>Author                                    <th>Description
* <tr><td>2023-11-09  <td>1.0                   <td>Akee(ysk@hopechart.com,尤胜坤)            <td>创建初始版本
* @copyright    杭州鸿泉物联网技术股份有限公司
*/
#ifndef _BTS_STATE_BT_H_
#define _BTS_STATE_BT_H_
#include "ofc/ofc_types.h"
#include "bts/bts_common.h"

#ifdef __cplusplus
extern "C" {
#endif





/**
 * @brief 准备更新请求
 * 
 * @param id 请求ID，用于跟踪请求
 * @return Int32 成功返回0
 */
Int32 BtsStatePrepareUpdateRequest(UInt64 id);

/**
 * @brief 回滚到指定版本
 * 
 * @param version 版本,0:表示上个版本,其他:不支持
 * @return Int32 成功返回0
 */
Int32 BtsStatePrepareRollbackRequest(UInt32 version);

/**
 * @brief 请求恢复出厂设置
 * 
 * 根据实际配置情况是否支持
 * 
 * @return Int32 成功返回0
 * 
 * @par 示例
 * @code
 * DoRecoveryAction(void) {
 *     // 准备请求
 *     BtsStatePrepareRecoveryRequest();
 *     // 提交请求
 *     BtsStateSubmitRequest();
 * }
 * 
 * @endcode
 */
//Int32 BtsStatePrepareRecoveryRequest(void);

/**
 * @brief 提交请求
 * 只有调用提交函数后，相应的信息才会永久化到Bts信息区;
 * 
 * @param submit true:提交，false:丢弃
 * @return Int32 成功返回0
 */
Int32 BtsStateSubmitRequest(Bool submit);

/**
 * @brief 确认
 * 
 * 应用层调用该函数告知bootloader已经确认上次固件
 * @note 只有当请求事务状态为kBtsRequestStatusCompleted时应用层调用确认，如果长时间
 * 不确认可能会触发自动回滚功能
 * 
 * @return Int32 成功返回0
 * 
 * @par 示例
 * @code
 * 
 * // App检测到升级后一切正常后触发
 * void OnApplicationAnyThingFine(void) {
 *     BtsStateOnConfirm();
 *     // 提交请求
 *     BtsStateSubmitRequest();
 * }
 * 
 * void OnApplicationCheckFailed(void) {
 *     BtsStatePrepareRollbackRequest();
 *      // 提交请求
 *     BtsStateSubmitRequest();
 * }
 * @endcode
 */
Int32 BtsStateOnConfirm(void);

/**
 * @brief 未完待续
 * 
 * @param cntr 
 * @return Int32 
 */
Int32 BtsStateOnRequestResume(Int32 cntr);

/**
 * @brief 请求被接收
 * 
 * @return Int32 成功返回0
 */
Int32 BtsStateOnRequestOpen(void);

/**
 * @brief 请求执行中
 * 
 * @return Int32 成功返回0
 */
Int32 BtsStateOnRequestPending(void);

/**
 * @brief 请求被拒绝
 * 
 * @param reason 原因码
 * @return Int32 成功返回0
 */
Int32 BtsStateOnRequestReject(UInt32 reason);

/**
 * @brief 请求执行失败
 * 
 * @param error 错误码
 * @param report 失败报告详情
 * @return Int32 成功返回0
 */
Int32 BtsStateOnRequestFailed(UInt32 error);

/**
 * @brief 请求执行完成
 * 
 * @param flags 标志
 * @return Int32 成功返回0
 */
Int32 BtsStateOnRequestCompleted(UInt32 flags);

/**
 * @brief 获得请求信息
 * 
 * 启动时调用该函数获得请求状态信息
 * 
 * @param info 
 * @param size 
 * @return Int32 
 */
Int32 BtsStateGetRequestInfo(TBtsRequestInfo *info, Int32 size);

/**
 * @brief 获取故障报告
 * 
 * @param report 接收报告信息
 * @return Int32 
 */
//Int32 BtsGetFaultReport(TBtsFaultReport *report);
#ifdef __cplusplus
} // extern "C" {
#endif
#endif
/**
 * @} 
 */
